package cn.iocoder.yudao.module.infra.convert.config;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigCreateReqVO;
import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigExcelVO;
import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigRespVO;
import cn.iocoder.yudao.module.infra.controller.admin.config.vo.ConfigUpdateReqVO;
import cn.iocoder.yudao.module.infra.dal.dataobject.config.ConfigDO;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;

import java.util.List;

/**
 * 配置转换
 *
 * @author huangweidong
 * @date 2023/05/09
 */
@Mapper
public interface ConfigConvert {

    ConfigConvert INSTANCE = Mappers.getMapper(ConfigConvert.class);

    /**
     * 转换分页
     *
     * @param page 分页
     * @return {@code PageResult<ConfigRespVO>}
     */
    PageResult<ConfigRespVO> convertPage(PageResult<ConfigDO> page);

    /**
     * 转换
     *
     * @param bean bean
     * @return {@code ConfigRespVO}
     */
    @Mapping(source = "configKey", target = "key")
    ConfigRespVO convert(ConfigDO bean);

    /**
     * 转换
     *
     * @param bean bean
     * @return {@code ConfigDO}
     */
    @Mapping(source = "key", target = "configKey")
    ConfigDO convert(ConfigCreateReqVO bean);

    /**
     * 转换
     *
     * @param bean bean
     * @return {@code ConfigDO}
     */
    ConfigDO convert(ConfigUpdateReqVO bean);

    /**
     * 转换列表
     *
     * @param list 列表
     * @return {@code List<ConfigExcelVO>}
     */
    @Mapping(source = "configKey", target = "key")
    List<ConfigExcelVO> convertList(List<ConfigDO> list);

}
